package indi.zhifa.engine.mpenhance.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.io.Serializable;
import java.util.List;
import java.util.function.Function;

public interface IZfDbService<T> extends IService<T> {
    <VO>Page<VO> page(IPage page, Wrapper<T> queryWrapper, Class<VO> cls);

    <VO>Page<VO> page(IPage page, Wrapper<T> queryWrapper, Class<VO> cls, Function<T,VO> convertor);

    <VO> List<VO> list(Wrapper<T> queryWrapper, Class<VO> cls);

    <VO> List<VO> list(Wrapper<T> queryWrapper, Class<VO> cls, Function<T,VO> convertor);

    T findOne(Wrapper<T> queryWrapper);

    boolean existById(Serializable id);

    /**
     * 查entity，如果不存在，则抛错
     */
    T check(Serializable pId);

    /**
     * 查更新所必须的Entity字段，如果不存在，则抛错
     */
    T checkForUpdate(Serializable pId);

    T checkMin(Serializable pId,String ... pCols);

    /**
     * 更新
     */
    T updatePull(Long pId, Object pEntity);

    T deleteById(Serializable pId);
}
